题解:P15521 [CCC 2016 J4] Arrival Time

490 字
2 分钟
题解:P15521 [CCC 2016 J4] Arrival Time

题面传送门:P15521 [CCC 2016 J4] Arrival Time

题目大意#

给出出发时间,考虑高峰期的特殊情况,计算到达时间。

思路讲解#

本题需要对不同出发时间进行分类讨论。可分为两种大情况:

  • 整个行程与高峰期完全无关,出发时间可分为:
    5:00前 10:00-13:00 19:00后
  • 整个行程有高峰期的存在,出发时间可分为:
    5:00-6:59 7:00-10:00 13:01-14:59 15:00-19:00

1.与高峰期完全无关

非高峰期时间恒为 22 小时。此时的到达时间即为 (h+2) mod 24:m(h+2)\bmod24:m。

2.有高峰期的存在

  • 出发时间为非高峰,到达时间为非高峰。

    (早高峰持续时间较短,此情况仅出现于早高峰前)

  • 出发时间为非高峰,到达时间为高峰。

  • 出发时间为高峰,到达时间为非高峰。

  • 出发时间为高峰,到达时间为高峰。

针对这四种情况,我们要算出状态变化后还需行驶的时间。高峰期由于速度是原来的一半,因此处理时将时间乘二即可。

代码实现#

变量声明

s←s\gets 输入字符串
h←h\gets 出发时间小时部分
m←m\gets 出发时间分钟部分
ah←ah\gets 到达时间小时部分
am←am\gets 到达时间分钟部分
yu←yu\gets 状态变化后还需行驶的时间

输入

输入的数据使用字符串存储,再从字符串中得出出发的小时与分钟。

cin>>s;
h=(s[0]-'0')*10+s[1]-'0';
m=(s[3]-'0')*10+s[4]-'0';

非高峰情况

if((h<5)||(h>=19)||(h>=10&&h<13)||((h==5||h==13)&&m==0)){
ah=h+2;
if(ah>=24) ah-=24;
am=m;
}

有高峰情况

  • 7:00前出发
yu=120-(7*60-(h*60+m));
yu*=2;
if(yu>180){//到达时间为非高峰
yu-=180;
yu/=2;
ah=10+yu/60;
am=yu%60;
}else{
ah=7+yu/60;
am=yu%60;
}
  • 7:00-10:00出发
yu=120-(10*60-(h*60+m))/2;
ah=10+yu/60;
am=yu%60;
  • 13:01-14:59出发
yu=120-(15*60-(h*60+m));
yu*=2;
ah=15+yu/60;
am=yu%60;
  • 15:00-19:00出发
yu=120-(19*60-(h*60+m))/2;
ah=19+yu/60;
am=yu%60;

输出

输出时占两位,不足用 00 补齐,可使用 printf 函数

printf("%02d:%02d",ah,am);

完整代码

#include<bits/stdc++.h>
using namespace std;
string s;
int h,m,ah,am,yu;
int main(){
cin>>s;
h=(s[0]-'0')*10+s[1]-'0';
m=(s[3]-'0')*10+s[4]-'0';
if((h<5)||(h>=19)||(h>=10&&h<13)||((h==5||h==13)&&m==0)){
ah=h+2;
if(ah>=24) ah-=24;
am=m;
}else{
if(h<7){
yu=120-(7*60-(h*60+m));
yu*=2;
if(yu>180){
yu-=180;
yu/=2;
ah=10+yu/60;
am=yu%60;
}else{
ah=7+yu/60;
am=yu%60;
}
}else if(h>=7&&h<=10){
yu=120-(10*60-(h*60+m))/2;
ah=10+yu/60;
am=yu%60;
}else if(h>=15&&h<=19){
yu=120-(19*60-(h*60+m))/2;
ah=19+yu/60;
am=yu%60;
}else{
yu=120-(15*60-(h*60+m));
yu*=2;
ah=15+yu/60;
am=yu%60;
}
}
printf("%02d:%02d",ah,am);
return 0;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

题解:P15521 [CCC 2016 J4] Arrival Time
https://zhedaotixuanbo.pages.dev/posts/题解:P15521 [CCC 2016 J4] Arrival Time/
作者
zhedaotixuanbo
发布于
2026-03-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
zhedaotixuanbo
这道题选什么? _____!
公告
分类
标签
站点统计
文章
17
分类
1
标签
21
总字数
6,295
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
ZTXB v1.0.0
文章许可
CC BY-NC-SA 4.0